public class TestDemo {
    /**
     * 位运算符 & | ^ ~
     */
        public static void main4(String[] args) {
//       ^按位异或:: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1
           int a = 0x1;
           int b = 0x2;
           System.out.printf("%x\n", a ^ b);
       }
       public static void main3(String[] args) {
//        ~按位取反: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
            int a = 0xf;
            System.out.printf("%x\n", ~a);
            int b = 10;
            System.out.println(~b);
        }
        public static void main2 (String[]args){
//        |按位或: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1
            int a = 10;  //01010
            int b = 20;  //10100
            System.out.println(a | b);
        }
        public static void main1 (String[]args){
            //    &按位与：如果两个二进制位都是 1, 则结果为 1, 否则结果为 0
            int a = 10;  //01010
            int b = 20;  //10100
            System.out.println(a % b);
        }
    /**
     * 移位运算 >> << >>>
     */
    public static void main5(String[] args) {
//        右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
        int a=10;
        System.out.println(a>>1);
        System.out.println(a>>2);
//        右移 1 位, 相当于原数字 / 2的1次方 右移 N 位, 相当于原数字 / 2 的N次方
    }

    public static void main6(String[] args) {
//        左移 <<: 最左侧位不要了, 最右侧补 0
        int a=10;
        System.out.println(a<<1);
        System.out.println(a<<2);
//        左移 1 位, 相当于原数字 * 2 的1次方 左移 N 位, 相当于原数字 * 2 的N次方
    }

    public static void main7(String[] args) {
//        无符号右移 >>>: 最右侧位不要了, 最左侧补 0.
        int a=10;
        System.out.println(a>>>1);
        System.out.println(a>>>2);
//        没有<<<
    }
    /**
     * 条件运算符
     */
    public static void main(String[] args) {
//        ()?():()
        // 求两个整数的最大值
        int a = 10;
        int b = 20;
        int max = a > b ? a : b ;
        System.out.println(max);
    }
}
